package com.xwdeshj.controller;

import javax.activation.MimetypesFileTypeMap;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Created by yushuting on 16/4/17.
 */
public class FromOSSupload {

//    private String postFileName = "tourXwdeshj/";  // 确保运行代码的路径中有该文件
//    private String ossEndpoint = "http://xwdeshj.oss-cn-shenzhen.aliyuncs.com/";  // 如: http://oss-cn-shanghai.aliyuncs.com
//    private String ossAccessId = "LTAIeWWY8VXpgK5n";  // 你的访问AK信息
//    private String ossAccessKey = "2Bq8jlBcpAX44pSHuvGrxD29acD6hC";  // 你的访问AK信息
//    private String objectName = "tourXwdeshj";  // 你上传文件之后的object名称
//    private String bucket = "xwdeshj";  // 你之前创建的bucket，确保这个bucket已经创建
//
//    private void PostObject() throws Exception {
//
//        String filepath=postFileName;
//        String urlStr = ossEndpoint.replace("http://", "http://"+bucket+"."); // 提交表单的URL为bucket域名
//
//        LinkedHashMap<String, String> textMap = new LinkedHashMap<String, String>();
//        // key
//        String objectName = this.objectName;
//        textMap.put("key", objectName);
//        // Content-Disposition
//        textMap.put("Content-Disposition", "attachment;filename="+filepath);
//        // OSSAccessKeyId
//        textMap.put("OSSAccessKeyId", ossAccessId);
//        // policy
//        String policy = "{\"expiration\": \"2120-01-01T12:00:00.000Z\",\"conditions\": [[\"content-length-range\", 0, 104857600]]}";
//        String encodePolicy = java.util.Base64.getEncoder().encodeToString(policy.getBytes());
//        textMap.put("policy", encodePolicy);
//        // Signature
//        String signaturecom = com.aliyun.oss.common.auth.ServiceSignature.create().computeSignature(ossAccessKey, encodePolicy);
//        textMap.put("Signature", signaturecom);
//
//        Map<String, String> fileMap = new HashMap<String, String>();
//        fileMap.put("file", filepath);
//
//        String ret = formUpload(urlStr, textMap, fileMap);
//        System.out.println("[" + bucket + "] post_object:" + objectName);
//        System.out.println("post reponse:" + ret);
//    }
//
//    private static String formUpload(String urlStr, Map<String, String> textMap, Map<String, String> fileMap) throws Exception {
//        String res = "";
//        HttpURLConnection conn = null;
//        String BOUNDARY = "9431149156168";
//        try {
//            URL url = new URL(urlStr);
//            conn = (HttpURLConnection) url.openConnection();
//            conn.setConnectTimeout(5000);
//            conn.setReadTimeout(30000);
//            conn.setDoOutput(true);
//            conn.setDoInput(true);
//            conn.setRequestMethod("POST");
//            conn.setRequestProperty("User-Agent",
//                    "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
//            conn.setRequestProperty("Content-Type",
//                    "multipart/form-data; boundary=" + BOUNDARY);
//
//            OutputStream out = new DataOutputStream(conn.getOutputStream());
//            // text
//            if (textMap != null) {
//                StringBuffer strBuf = new StringBuffer();
//                Iterator iter = textMap.entrySet().iterator();
//                int i = 0;
//                while (iter.hasNext()) {
//                    Map.Entry entry = (Map.Entry) iter.next();
//                    String inputName = (String) entry.getKey();
//                    String inputValue = (String) entry.getValue();
//                    if (inputValue == null) {
//                        continue;
//                    }
//                    if (i == 0) {
//                        strBuf.append("--").append(BOUNDARY).append(
//                                "\r\n");
//                        strBuf.append("Content-Disposition: form-data; name=\""
//                                + inputName + "\"\r\n\r\n");
//                        strBuf.append(inputValue);
//                    } else {
//                        strBuf.append("\r\n").append("--").append(BOUNDARY).append(
//                                "\r\n");
//                        strBuf.append("Content-Disposition: form-data; name=\""
//                                + inputName + "\"\r\n\r\n");
//
//                        strBuf.append(inputValue);
//                    }
//
//                    i++;
//                }
//                out.write(strBuf.toString().getBytes());
//            }
//
//            // file
//            if (fileMap != null) {
//                Iterator iter = fileMap.entrySet().iterator();
//                while (iter.hasNext()) {
//                    Map.Entry entry = (Map.Entry) iter.next();
//                    String inputName = (String) entry.getKey();
//                    String inputValue = (String) entry.getValue();
//                    if (inputValue == null) {
//                        continue;
//                    }
//                    File file = new File(inputValue);
//                    String filename = file.getName();
//                    String contentType = new MimetypesFileTypeMap().getContentType(file);
//                    if (contentType == null || contentType.equals("")) {
//                        contentType = "application/octet-stream";
//                    }
//
//                    StringBuffer strBuf = new StringBuffer();
//                    strBuf.append("\r\n").append("--").append(BOUNDARY).append(
//                            "\r\n");
//                    strBuf.append("Content-Disposition: form-data; name=\""
//                            + inputName + "\"; filename=\"" + filename
//                            + "\"\r\n");
//                    strBuf.append("Content-Type: " + contentType + "\r\n\r\n");
//
//                    out.write(strBuf.toString().getBytes());
//
//                    DataInputStream in = new DataInputStream(new FileInputStream(file));
//                    int bytes = 0;
//                    byte[] bufferOut = new byte[1024];
//                    while ((bytes = in.read(bufferOut)) != -1) {
//                        out.write(bufferOut, 0, bytes);
//                    }
//                    in.close();
//                }
//                StringBuffer strBuf = new StringBuffer();
//                out.write(strBuf.toString().getBytes());
//            }
//
//            byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
//            out.write(endData);
//            out.flush();
//            out.close();
//
//            // 读取返回数据
//            StringBuffer strBuf = new StringBuffer();
//            BufferedReader reader = new BufferedReader(new InputStreamReader(
//                    conn.getInputStream()));
//            String line = null;
//            while ((line = reader.readLine()) != null) {
//                strBuf.append(line).append("\n");
//            }
//            res = strBuf.toString();
//            reader.close();
//            reader = null;
//        } catch (Exception e) {
//            System.err.println("发送POST请求出错: " + urlStr);
//            throw e;
//        } finally {
//            if (conn != null) {
//                conn.disconnect();
//                conn = null;
//            }
//        }
//        return res;
//    }
//
//    public static void main(String[] args) throws Exception {
//        OssPostObject ossPostObject = new OssPostObject();
//        ossPostObject.PostObject();
//    }

}